package com.runze.base.web;

/**
 * 条件接口，
 * 
 * 用于实现接口的条件类的对象从控制层传递到dao层进行查询
 * 
 * @author wrzhxy@qq.com
 * @创建时间 2017年4月28日 上午11:50:28
 */
public class Query {
	private static final int PAGESIZE = 20;
	
	protected int pageNo = 1;
	protected int pageSize = PAGESIZE;	// 每页最大数据量
	protected int maxPageNo = 1;
	protected int pageable = 0;			// 是否分页，默认不分页
	protected int sort = 1;				// 默认倒序
	protected long totalNum = 0;		// 总数据量
	
	public Query() {
	}
	/**
	 * 用总数据量计算总页数
	 * @param totalData 总数据量
	 */
	public Query(long totalData) {
		pageable = 1;
		maxPageNo = (int)((totalData + pageSize -1) / pageSize);
	}
	public Query(int pageNo, int pageSize) {
		pageable = 1;
		this.pageNo = pageNo;
		this.pageSize = pageSize;
	}
	public Query(int pageNo, int pageSize, long totalNum) {
		pageable = 1;
		this.pageNo = pageNo;
		this.pageSize = pageSize;
		this.maxPageNo = (int)((totalNum + pageSize -1) / pageSize);
		this.totalNum = totalNum;
	}
	/**
	 * 
	 * @param pageNo
	 * @param pageSize
	 * @param maxPageNo 最大页码 由数据库查出来的来决定
	 */
	public Query(int pageNo, int pageSize, int maxPageNo) {
		this.pageNo = pageNo;
		this.pageSize = pageSize;
		this.maxPageNo = maxPageNo;
	}
	/**
	 * 不按默认（倒序）排序
	 * @param sort
	 */
	public Query(int sort) {
		this.sort = sort;
	}
	/**
	 * 全部自定义
	 * @param pageNo		当前页码
	 * @param pageSize		每页数据量
	 * @param maxPageNo		最大页码
	 * @param sort			正序
	 */
	public Query(int pageNo, int pageSize, long totalData, int sort) {
		this.pageable = 1;	// 分页
		this.pageNo = pageNo;
		this.pageSize = pageSize;
		this.maxPageNo = (int)((totalData + pageSize -1) / pageSize);
		this.sort = sort;
	};
	public int getPageNo() {
		return pageNo > 0 ? pageNo : 1;
	}
	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}
	public int getPageSize() {
		return pageSize > 0 ? pageSize : PAGESIZE;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	public int getMaxPageNo() {
		return maxPageNo;
	}
	/**
	 * 用总数据量计算总页数
	 * @param totalData 总数据量
	 */
	public void setMaxPageNo(long totalData) {
		maxPageNo = (int)((totalData + pageSize -1) / pageSize);
		maxPageNo = maxPageNo == 0 ? 1 : maxPageNo;
	}
	public int getPageable() {
		return pageable;
	}
	public void setPageable(int pageable) {
		this.pageable = pageable;
	}
	public int getSort() {
		return sort;
	}
	public void setSort(int sort) {
		this.sort = sort;
	}
	public long getTotalNum() {
		return totalNum;
	}
	public void setTotalNum(long totalNum) {
		this.totalNum = totalNum;
	}
	public void setMaxPageNo(int maxPageNo) {
		this.maxPageNo = maxPageNo;
	}
}
